/**
 * @file bsp_delay.c
 * @author liufeng (liufeng@injoinic.com)
 * @brief 用于us级延时
 * @version 0.1
 * @date 2025-01-07
 *
 * @copyright Copyright (c) 2025  injoinic
 *
 */

#include "bsp_delay.h"
#include "tim.h"

/**
 * @brief  初始化定时器
 * @retval None
 */
void bsp_Delay_Init(void)
{
    // us延时所用的定时器初始化
    // 时钟初始化为100MHz
}

/**
 * @brief  毫秒级阻塞延时
 * @param  cnt : 延时ms数
 * @retval None
 */
void Delay_ms(uint32_t cnt)
{
    __HAL_TIM_SET_AUTORELOAD(&htim5, 100000);                    // 1ms时基
    __HAL_TIM_ENABLE(&htim5);                                    // 使能计数器
    for (uint32_t i = 0; i < cnt; i++) {
        while (!(__HAL_TIM_GET_FLAG(&htim5, TIM_FLAG_UPDATE))) { // 等待update事件
        }
        __HAL_TIM_CLEAR_FLAG(&htim5, TIM_FLAG_UPDATE);           // 清除更新标志位
    }
    __HAL_TIM_DISABLE(&htim5);                                   // 关闭计数器
}

/**
 * @brief  微秒级阻塞延时
 * @param  cnt : 延时us数
 * @retval None
 */
void Delay_us(uint32_t cnt)
{
    __HAL_TIM_SET_AUTORELOAD(&htim5, 100);                       // 1us时基
    __HAL_TIM_ENABLE(&htim5);                                    // 使能计数器
    for (uint32_t i = 0; i < cnt; i++) {
        while (!(__HAL_TIM_GET_FLAG(&htim5, TIM_FLAG_UPDATE))) { // 等待update事件
        }
        __HAL_TIM_CLEAR_FLAG(&htim5, TIM_FLAG_UPDATE);           // 清除更新标志位
    }
    __HAL_TIM_DISABLE(&htim5);                                   // 关闭计数器
}
